//
//  AppDelegate+UMHandler.m
//  MSJD
//
//  Created by 箭军刘 on 2018/10/18.
//  Copyright © 2018年 xiangbo. All rights reserved.
//

#import "AppDelegate+UMHandler.h"

//#import <UMShare/UMShare.h>
#import "WXApi.h"

@implementation AppDelegate (UMHandler)

- (void)registerUMSDK:(UIApplication *)application
              options:(NSDictionary *)launchOptions {
    
//    [[UMSocialManager defaultManager] setUmSocialAppkey:@"5656ad60e0f55ae19f0046cc"];
//
//    // FIXME:暂时的账号
//    //设置微信AppId、appSecret，分享url
//    [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_WechatSession appKey:@"wxf438698c2a1b15f9" appSecret:@"4fa7f6bec078443f562cb931e12bf974" redirectURL:@"http://www.baidu.com"];
    
    // 注册微信账号和appid
    [WXApi registerApp:@"wxf438698c2a1b15f9"];
    
}

#pragma mark - WXApiDelegate
/*! @brief 收到一个来自微信的请求，第三方应用程序处理完后调用sendResp向微信发送结果
 *
 * 收到一个来自微信的请求，异步处理完成后必须调用sendResp发送处理结果给微信。
 * 可能收到的请求有GetMessageFromWXReq、ShowMessageFromWXReq等。
 * @param req 具体请求内容，是自动释放的
 */
- (void)onReq:(BaseReq*)req {
    
}

/*! @brief 发送一个sendReq后，收到微信的回应
 *
 * 收到一个来自微信的处理结果。调用一次sendReq后会收到onResp。
 * 可能收到的处理结果有SendMessageToWXResp、SendAuthResp等。
 * @param resp具体的回应内容，是自动释放的
 */
- (void)onResp:(BaseResp*)resp {
    
    /*
     ErrCode ERR_OK = 0(用户同意)
          ERR_AUTH_DENIED = -4（用户拒绝授权）
          ERR_USER_CANCEL = -2（用户取消）
          code    用户换取access_token的code，仅在ErrCode为0时有效
          state   第三方程序发送时用来标识其请求的唯一性的标志，由第三方程序调用sendReq时传入，由微信终端回传，state字符串长度不能超过1K
          lang    微信客户端当前语言
          country 微信用户当前国家信息
     */

    //判断是否为授权请求，否则与微信支付等功能发生冲突
    
    if ([resp isKindOfClass:[SendAuthResp class]]) {
        SendAuthResp *aresp = (SendAuthResp *)resp;
        NSLog(@"errorCode:%d code %@", aresp.errCode,aresp.code);
        [[NSNotificationCenter defaultCenter] postNotificationName:@"wechatDidLoginNotification" object:self userInfo:@{@"errcode":@(aresp.errCode), @"code":[MSSafeObject stringInfo:aresp.code]}];
    }
}

// 这个方法是用于从微信返回第三方App
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options {
    return [self handleURL:url];
    return YES;
}

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler {
    return YES;
}

- (BOOL)handleURL:(NSURL *)url {
    NSLog(@"外部打开URL %@",url);
    
    NSString *wxstr = @"wxf438698c2a1b15f9";

    if ([url.absoluteString hasPrefix:wxstr]) {
        NSString *scheme;
        NSDictionary *dic;
        NSString *parameter;
        NSString *host;
        [self parseURL:url host:&host scheme:&scheme parameter:&parameter query:&dic];
        if ([url.absoluteString containsString:@"oauth"]) {
            // 第三方登录
            [WXApi handleOpenURL:url delegate:self];
            return YES;
        } else {
            if (![MSSafeObject isNull:dic[@"code"]]) {
                [[NSUserDefaults standardUserDefaults]setObject:dic[@"code"] forKey:@"wxauthCode"];
                [[NSUserDefaults standardUserDefaults]synchronize];
                [WXApi handleOpenURL:[NSURL URLWithString:@"wxf438698c2a1b15f9://oauth?code=xxxx"] delegate:self];
                return YES;
            }
        }
    }

    return YES;
}

/**
 *  解析HTTP请求的URL，获取GET方法的参数
 *
 *  @param url URL
 *
 *  @return 参数集合，返回NSDictionary
 */
- (NSDictionary *)parseURLQuerystring:(NSString *)url
{
    
    //根据 ? 和 & 来分割URL
    NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:@"?&"];
    NSArray *array = [url componentsSeparatedByCharactersInSet:set];
    
    if (!array.count) {
        return nil;
    }
    
    NSMutableDictionary *mutableDic = [NSMutableDictionary dictionary];
    
    for (NSString *string in array) {
        NSArray *parameters = [string componentsSeparatedByString:@"="];
        if (parameters.count == 2) {
            NSString *key = parameters[0];
            NSString *value = parameters[1];
            if (key.length && value.length) {
                [mutableDic setObject:parameters[1] forKey:parameters[0]];
            }
            
        }
    }
    
    return mutableDic;
    
    /*
     + (NSDictionary *)parseURLParams:(NSString *)query{
     NSArray *pairs = [query componentsSeparatedByString:@"&"];
     NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
     for (NSString *pair in pairs) {
     NSArray *kv = [pair componentsSeparatedByString:@"="];
     if (kv.count == 2) {
     NSString *val =[[kv objectAtIndex:1] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
     [params setObject:val forKey:[kv objectAtIndex:0]];
     }
     }
     return [params autorelease];
     }
     */
}




- (void)parseURL:(NSURL *)url
            host:(NSString **)host
          scheme:(NSString **)scheme
       parameter:(NSString **)parameter
           query:(NSDictionary **)query

{
    if ([url scheme]) {
        *scheme = [url scheme];
    }
    if ([url host]) {
        *host = [url host];
    }
    if ([url parameterString]) {
        *parameter = [url parameterString];
    }
    if ([url query]) {
        NSString *queryString = [url query];
        *query = [self parseURLQuerystring:queryString];
    }
}



@end
